#ifndef __SWLOG_H
#define __SWLOG_H

#include <stdio.h>
#include <stddef.h>  
#include "stm32f4xx_hal.h" 


extern UART_HandleTypeDef huart1;


#ifndef LOG_UART_HANDLE
#define LOG_UART_HANDLE huart1  
#endif


typedef void (*log_output_fn_t)(const char *str, size_t len);


void log_default_output(const char *str, size_t len);


void log_set_output(log_output_fn_t output_fn);

typedef enum {
    LOG_LEVEL_NONE = 0,  // 不输出任何日志
    LOG_LEVEL_ERROR,
    LOG_LEVEL_WARNING, 
    LOG_LEVEL_INFO,
    LOG_LEVEL_DEBUG
} LogLevel_t;

void log_init(void);
void log_set_level(LogLevel_t level);
void log_error(const char *format, ...);
void log_warning(const char *format, ...);
void log_info(const char *format, ...);

#endif /* __SWLOG_H */
